<?php
/*
 * cущность поста
 */
class Model_Post extends App_Model_Entity {
    protected $_data = array(
        'id'      => null,
        'title'   => null,
        'text'    => null,
        'date'    => null,
        'blog_id' => null,
        'main'    => null
    );
    
    protected $_blog = null;
    
    protected $_comments;
    
    protected $_commentsCount;
    
    public function __get($field){
        switch ($field){
            case 'blog' : return $this->getBlog();
                break;
            case 'comments' : return $this->getComments();
                break;
            case 'commentsCount' : return $this->getCommentsCount();
                break;
            default: return parent::__get($field);
                break;
        }
    }
    // добавить удалить комметарии 
    public function addComments(array $comments)
    {
        foreach($comments as $comment){
            $this->addComment($comment);       
        }
    }
    
    public function addComment($comment)
    {
        $this->_comments[$comment->id] = $comment;   
    }
    
    public function removeComment($comment)
    {
        unset($this->_commnets[$comment->id]);     
    }
    // получить блог в котором содержиться данный пост
    public function getBlog()
    {
        if($this->_blog === null){
            $blogMapper = new Model_BlogsMapper();
            if($this->blog_id){
                $blog = $blogMapper->findBlogByPost($this);
            }   
            $this->_blog = $blog;
        }
        return $this->_blog;
    }
    // получить комметарии
    public function getComments()
    {
        if($this->_comments === null){
            $commentMapper = new Model_CommentsMapper();
            $this->_comments = $commentMapper->getCommentsByPost($this);
        }
        return $this->_comments;
    }
    /*
     * получить количество комментариев, 
     * хотя конечно мне кажется что стоило хранить кол-во комметриев в таблице с постом,
     * а то так как то не очень то и производительно
     */
    public function getCommentsCount()
    {
        if($this->_commentsCount === null){
            $commentMapper = new Model_CommentsMapper();
            $this->_commentsCount = $commentMapper->getCommentsCountByPost($this);
        }
        return $this->_commentsCount;
    }
}